package uy.org.softtech.cssuite.core;

import javax.annotation.PostConstruct;

import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * Clase abstracta para representar las tareas programadas en la aplicación.
 * 
 * @author fabian.lobo
 */
public abstract class TareaProgramada {
	
	public static final String _1_AM = "0 0 1 * * *";
	
	protected final String SERVICIO = getClass().getName() + "#ejecutarTarea";
	
	/**
	 * Método para verificar que todos los parámetros han sido seteados correctamente.
	 * 
	 * @author fabian.lobo
	 */
	@PostConstruct
	public void inicializacion(){
			
	}
	
	/**
	 * Tarea a ser ejecutada.
	 */
	@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED)
	public abstract void ejecutarTarea();

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	public abstract String toString();
}
